// 基础配置
const baseConfig = {
  // 环境切换（开发/生产）
  baseUrl: 'https://www.daotehe.com',    // 生产环境
  timeout: 10000, // 超时时间（ms）
  header: {
    'Content-Type': 'application/json' // 默认请求头
  }
};

/**
 * 微信小程序请求封装
 * @param {Object} options - 请求配置
 * @param {string} options.url - 接口路径（相对路径）
 * @param {string} [options.method='GET'] - 请求方法（GET/POST/PUT/DELETE）
 * @param {Object} [options.data={}] - 请求参数
 * @param {boolean} [options.showLoading=true] - 是否显示加载提示
 * @param {string} [options.loadingText='加载中...'] - 加载提示文本
 * @param {boolean} [options.needToken=true] - 是否需要携带 Token
 * @param {Function} [options.failCallback] - 自定义错误回调
 * @returns {Promise} - 响应数据
 */
const request = (options = {}) => {
  const {
    url,
    method = 'POST',
    data = {},
    showLoading = true,
    loadingText = '加载中...',
    needToken = false,
    failCallback
  } = options;

  // 显示加载提示
  if (showLoading) {
    wx.showLoading({ title: loadingText, mask: true });
  }

  // 构建完整请求头
  const header = { ...baseConfig.header };
  // 携带 Token（从本地存储获取，根据项目实际存储方式调整）
  if (needToken) {
    const token = wx.getStorageSync('token');
    if (token) header.Authorization = `Bearer ${token}`;
  }

  return new Promise((resolve, reject) => {
    wx.request({
      url: `${baseConfig.baseUrl}${url}`, // 完整接口地址
      method,
      data,
      header,
      timeout: baseConfig.timeout,
      // 成功响应
      success: (res) => {
        const { statusCode, data: responseData } = res;
        // 状态码判断（200 为成功，根据后端实际规则调整）
        if (statusCode === 200) {
          // 假设后端响应格式：{ code: 0, msg: '成功', data: {} }
          const { code, msg, data: result } = responseData;
          if (code === 0) {
            // 业务成功：返回核心数据
            resolve(result);
          } else {
            // 业务失败：提示错误信息
            wx.showToast({ title: msg || '操作失败', icon: 'none' });
            // 自定义错误回调
            if (failCallback && typeof failCallback === 'function') {
              failCallback(responseData);
            }
            reject(responseData);
          }
        } 
        // else if (statusCode === 401) {
        //   // Token 过期：跳转登录页（根据项目路由调整）
        //   wx.showToast({ title: '登录已过期，请重新登录', icon: 'none' });
        //   wx.navigateTo({ url: '/pages/login/login' });
        //   reject({ code: 401, msg: 'Token 过期' });
        // } 
        else {
          // 其他状态码错误
          wx.showToast({ title: `请求失败（${statusCode}）`, icon: 'none' });
          reject({ code: statusCode, msg: '网络请求错误' });
        }
      },
      // 请求失败（网络错误等）
      fail: (err) => {
        wx.showToast({ title: '网络异常，请稍后重试', icon: 'none' });
        if (failCallback && typeof failCallback === 'function') {
          failCallback(err);
        }
        reject(err);
      },
      // 无论成功失败，关闭加载提示
      complete: () => {
        if (showLoading) {
          wx.hideLoading();
        }
      }
    });
  });
};

// 简化常用请求方法（GET/POST/PUT/DELETE）
const api = {
  get: (url, options = {}) => request({ ...options, url, method: 'GET' }),
  post: (url, data, options = {}) => request({ ...options, url, method: 'POST', data }),
  put: (url, data, options = {}) => request({ ...options, url, method: 'PUT', data }),
  delete: (url, data, options = {}) => request({ ...options, url, method: 'DELETE', data })
};

// 导出（全局使用）
module.exports = {
  request,
  ...api
};